﻿#region 참조 네임스페이스

using Skying.Resources;
using Skying.Windows.API;
using System;
using System.Diagnostics;

#endregion

namespace Skying.Windows
{
	/// <summary>
	/// 윈도우 시작 버튼에 대한 컨트롤 인터페이스를 제공한다.
	/// </summary>
	public class StartButton
	{
		#region 상수

		/// <summary>
		/// 윈도우 시작 버튼의 클래스명 상수를 나타낸다.
		/// </summary>
		private static string _START_BUTTON_CLASSNAME = "Button";

		/// <summary>
		/// 윈도우 시작 버튼의 핸들 상수를 나타낸다.
		/// </summary>
		private static readonly IntPtr _START_BUTTON_HANDLE;

		/// <summary>
		/// 윈도우 탐색기의 프로세스명 상수를 나타낸다.
		/// </summary>
		private static string _EXPLORER_PROCESS_NAME = "explorer";

		#endregion

		#region 프로퍼티

		/// <summary>
		/// 윈도우 시작 버튼이 존재하는지 여부를 가져온다.
		/// </summary>
		public static bool Exist
		{
			get
			{
				return !_START_BUTTON_HANDLE.Equals(IntPtr.Zero);
			}
		}

		#endregion

		#region 생성자/소멸자

		static StartButton()
		{
			Process explorerProcess = Process.GetProcessesByName(_EXPLORER_PROCESS_NAME)[0];

			ResourceAnalyzer resourceAnalyzer = new ResourceAnalyzer(explorerProcess.MainModule.FileName);

			string startCaption = resourceAnalyzer.FindString(34, 533);

			_START_BUTTON_HANDLE = User32.FindWindow(_START_BUTTON_CLASSNAME, startCaption);
		}

		#endregion

		#region 시작 버튼 윈도우 Show/Hide

		/// <summary>
		/// 시작 버튼 윈도우를 보여지도록 조정한다.
		/// </summary>
		public static void Show()
		{
			if (_START_BUTTON_HANDLE != null && !_START_BUTTON_HANDLE.Equals(IntPtr.Zero))
			{
				User32.ShowWindow(_START_BUTTON_HANDLE, User32.CmdShow.SW_SHOW);
			}
		}

		/// <summary>
		/// 시작 버튼 윈도우를 감추도록 조정한다.
		/// </summary>
		public static void Hide()
		{
			if (_START_BUTTON_HANDLE != null && !_START_BUTTON_HANDLE.Equals(IntPtr.Zero))
			{
				User32.ShowWindow(_START_BUTTON_HANDLE, User32.CmdShow.SW_HIDE);
			}
		}

		#endregion
	}
}